您的位置:首页 > 其它

几种简单的排序算法

2017-04-05 18:06 183 查看
冒泡排序:

每次外层循环都找到num[i]后面元素的最大的数值,并将这个数值存入num[i],原先num[i]存储的数值被移动到后面,这样等整个循环都结束,数组按照从大到小的顺序排列。

int num[10]={1,2,3,4,5,6,7,8,9,10};
int temp;
for(int i=0;i<10;i++)
{
for(int j=i;j<10;j++)
{
if(num[i]<num[j])
{
temp=num[i];
num[i]=num[j];
num[j]=temp;
}
}

}


插入排序:

将数组前n个数已经按照顺序排列好,接下来将第n+1个数插入到这前n个数中间,直到把所有的数都插入完。

static void insertion_sort(int[] unsorted)
{
for (int i = 1; i < unsorted.Length; i++)
{
if (unsorted[i - 1] > unsorted[i])
{
int temp = unsorted[i];
int j = i;
while (j > 0 && unsorted[j - 1] > temp)
{
unsorted[j] = unsorted[j - 1];
j--;
}
unsorted[j] = temp;
}
}
}


选择排序:

每次都将最小的元素放在num[i],然后i++,这样直到把整个数组遍历一遍,数组将按照从小到大的顺序排列。

for(int i=0; i<v.size(); i++)
{
int min = v[i];
int temp;
int index = i;
for(int j=i+1;j<v.size();j++)
{
if(v[j] < min)
{
min = v[j];
index = j;
}
}

temp = v[i];
v[i] = min;
v[index]= temp;
}


快速排序:

void sort(int *a, int left, int right)
{
if(left >= right)
{
return ;
}
int i = left;
int j = right;
int key = a[left];

while(i < j)
{
while(i < j && key <= a[j])
{
j--;
}
a[i] = a[j];
while(i < j && key >= a[i])
{
i++;
}
a[j] = a[i];
}

a[i] = key;
sort(a, left, i - 1);
sort(a, i + 1, right);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: