C语言排序法

/*交换排序法
前面的与后面的比较、交换
*/
void sort(int a[], int n)
{
 int i, j, temp;
 for (i = 0; i < n; i++)
  for (j = i + 1; j < n; j++)
   if (a[i] < a[j])
   {
    temp = a[i];
    a[i] = a[j];
    a[j] = temp;
   }
}
/*选择排序法
基本思想:在要排序的一组数中,选出最小(或最大)的一个数与第一个位置的数交换;
在剩下的数当中找最小的与第二个位置的数交换,即顺序放在已排好序的数列的最后,
如此循环,直到全部数据元素排完为止。
*/
void sort(int a[], int n)
{
 int i, j, temp, index;
 for (i = 0; i < n; i++)
 {
  index = i;
  for (j = i + 1; j < n; j++)
   if (a[index] < a[j])
    index = j;
  temp = a[i];
  a[i] = a[index];
  a[index] = temp;
 }
}
C语言中的排序算法有很多,常见的有冒泡排序、选择排序、插入排序等简单排序算法,还有快速排序、归并排序等高效排序算法。下面以“快速排序”为例做详细介绍。 ### 快速排序简介 快速排序是一种非常高效的排序算法,它采用分治策略来对一个数组进行排序。其基本思想是:通过一趟扫描将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法递归地去排序这两部分数据,最终得到有序序列。 #### 实现步骤 1. **选取基准值**:从数列中挑出一个元素作为基准值(pivot)2. **分区操作**:重新排列数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的摆在后面(相同的数可以到任一边)。在这个划分之后,该基准就处于数列中间位置。这个称为一次划分(partitioning)操作。 3. **递归排序**:递归地将小于基准值的部分和大于基准值的部分分别再按照上述两个过程处理。 4. **结束条件**:当子序列长度为01时停止递归,此时整个序列已排好序。 ```c void quickSort(int arr[], int left, int right){ if(left < right){ int pivotIndex = partition(arr, left, right); // 分区,并获取新的枢纽索引 quickSort(arr, left, pivotIndex - 1); // 对左半边排序 quickSort(arr, pivotIndex + 1, right); // 对右半边排序 } } int partition(int arr[], int left, int right){ int pivotValue = arr[right]; // 取最右侧的元素作pivot int storeIndex = left; for(int i=left;i<right;i++){ if(arr[i] <= pivotValue){ swap(&arr[storeIndex], &arr[i]); storeIndex++; } } swap(&arr[storeIndex], &arr[right]); // 将pivot放到合适的位置上 return storeIndex; // 返回pivot的新位置 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值